package com.sinog.biz.service.business.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sinog.biz.config.param.Converse;
import com.sinog.biz.mapper.havexml.AbPrisonerMapper;
import com.sinog.biz.mapper.havexml.AbTuoguanMapper;
import com.sinog.biz.service.business.BjdxTuoguanInfoMainService;
import com.sinog.biz.util.CodeUrlUtils;
import com.sinog.biz.util.IdGen;
import com.sinog.core.domain.AbTuoguanResultVo;
import com.sinog.core.util.JsonUtil;
import com.sinog.core.util.StrUtil;
import com.sinog.core.utilbean.Result;
import com.sinog.core.utilbean.ReturnCode;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * @desc 安置帮教管理 - 帮教对象信息管理 - 失联人员管理
 * @author sunsf
 * @date 2020-02-14-16:40
 */
@Service
public class BjdxTuoguanInfoMainServiceImpl extends ServiceImpl<AbTuoguanMapper,AbTuoguanResultVo> implements BjdxTuoguanInfoMainService {

    @Resource
    private AbTuoguanMapper abTuoguanMapper;
    @Resource
    private AbPrisonerMapper abPrisonerMapper;

    /**
     * 安置帮教管理 - 帮教对象信息管理 - 失联人员管理 - 列表
     * @param pageIndex 起始页
     * @param pageSize 止页
     * @param type 是否失联
     * @param key 姓名模糊搜索
     * @param departId 当前登录用户的departId
     * @param level 当前登录用户的level
     * @param orgId 当前登录用户的上级编号
     * @param sortField 排序字段
     * @param sortOrder 排序方式
     * @return String
     */
    @Override
    public String getHtuoguanList(Integer pageIndex,Integer pageSize,@Converse(caseIf = "-1", converseTo = "0")
            String key,String departId,int level,String orgId,String type,String sortField,String sortOrder) {
        // 增加山西个性化代码
        String localCode = CodeUrlUtils.getLocalCode();
        Page<Map<String,String>> page = new Page<>(pageIndex + 1,pageSize);
        page = page.setRecords(abTuoguanMapper.getTuoguanlList(page,key,departId,level,orgId,type,sortField,sortOrder,localCode));
        return JsonUtil.toText(page.getTotal(),page.getRecords());
    }

    /**
     * 安置帮教管理 - 帮教对象信息管理 - 失联人员管理 - 失联登记 - 姓名搜索
     * 失联人员的状态条件约束：是安帮人员、没有失联的、没有解除安置帮教的、司法所补录人员中已经录入服刑信息的、对于吸毒状态没有要求
     * @param key 姓名模糊搜索
     * @param departId 当前登录用户的departId
     * @param level 当前登录用户的level
     * @param orgId 当前登录用户的上级编号
     * @return List<Map < String,Object>>
     */
    @Override
    public List<Map<String,Object>> getPrisonerList(String key,String departId,int level,String orgId) {
        return abPrisonerMapper.getPrisonerList(key,departId,level,orgId);
    }

    /**
     * 安置帮教管理 - 帮教对象信息管理 - 失联人员管理 - 失联登记 - 保存/找回
     * @param dataStr 实际参数
     * @return Result
     */
    @Override
    public Result saveSldjBaseInfo(String dataStr) {
        //参数实体
        AbTuoguanResultVo prisoner = JsonUtil.toBean(dataStr,AbTuoguanResultVo.class);
        //数据库查询实体
        AbTuoguanResultVo oldPrisoner = abTuoguanMapper.selectOneByPrinum(prisoner.getPriNum());
        if(null != oldPrisoner) {
            prisoner.setId(oldPrisoner.getId());
        } else if(StringUtils.isBlank(prisoner.getId())) {
            prisoner.setId(IdGen.strid());
        }
        boolean flag = prisoner.insertOrUpdate();
        if(flag) {
            return Result.success("保存成功");
        }
        return Result.failure(ReturnCode.SAVE_FAILED);
    }

    /**
     * 失联管理人员--找回查询--保存
     * @param priNum priNum
     * @return Result
     */
    @Override
    public Result getTuoguanInfoById(String priNum) {
        Map<String,Object> abp = abPrisonerMapper.getTuoguanInfoById(priNum);
        if(null != abp && !abp.isEmpty()) {
            return Result.success(StrUtil.mapToString(abp));
        }
        return Result.failure(ReturnCode.SELECT_FAILED);
    }

    /**
     * 失联管理人员--失联记录
     * @param slId slId
     * @return Result
     */
    @Override
    public Result getTuoguanJlInfoById(String slId) {
        Map<String,Object> abp = abPrisonerMapper.getTuoguanJlInfoById(slId);
        if(null != abp && !abp.isEmpty()) {
            return Result.success(StrUtil.mapToString(abp));
        }
        return Result.failure(ReturnCode.SELECT_FAILED);
    }
}